Otima função ![]()
- Forums
- OTServ
- Recursos
- Linguagens de Programação
- getPlayerItems(cid)
info
Group: Conde
Joined: 20/09/12
Posts: 711
Reputation: +86
Tibia Character: noé

otimo code, sempre inovando em fera, essa funçao e o script q se passou sera muito util para os ot-admins ai que habitam o xt.
info
Group: Marquês
Joined: 16/06/07
Posts: 1.2k
Reputation: +377
Gender: Masculino
Tibia Character: Nenhum

Boa função!
Parabéns pelo trabalho que vem fazendo.
Poderia Exemplificar, para oq essa função serve? um exemplo?
Edited Abril 10 by Lordbaxx
info
Group: Conde
Joined: 16/09/07
Posts: 600
Reputation: +151
Gender: Masculino
Tibia Character: NãoJogoMais

Ótima função.
Mais pra frente irei adicionar ao meu Projeto.
Obrigado por compartilhar estas pérolas.
Parabéns pelo avanço em C++, caotic.
Bom, uma dúvida, qual a vantagem da sua função sobre a getPlayerItemById, porque, certo, a sua retorna uma tabela inteira com todos os itens do jogador, mas não vejo o uso dessa tabela além de mostrar todos os itens do jogador em um FYI ou text dialog. Então, para verificar um único item do jogador, ainda recomendo a getPlayerItemById que usa um método do game.cpp findItemOfType.
Mas, volto a dizer, parabaims parabéns.
info
Group: Conde
Joined: 16/09/07
Posts: 600
Reputation: +151
Gender: Masculino
Tibia Character: NãoJogoMais

Garou, creio que esta função seja utilizada para saber todos os itens do player em caso de atividades ilegais do servers, como bug para conseguir mais itens por exemplo.
Ou até mesmo itens VIP's que foram passados para players tradicionais, com este comando você executa uma vez e sabe todos os itens do player, e não precisa ficar pondo ID por ID e conferindo se o player possui...
Basta executá-la uma única vez no player e conferir os itens que estão na lista.
#Creio que seja isso.
Abraços.
Edited Abril 11 by Adriano Swatt
info
Group: Infante
Joined: 04/03/11
Posts: 1.6k
Reputation: +393
Tibia Character: No Have

Parabéns pelo avanço em C++, caotic.
Bom, uma dúvida, qual a vantagem da sua função sobre a getPlayerItemById, porque, certo, a sua retorna uma tabela inteira com todos os itens do jogador, mas não vejo o uso dessa tabela além de mostrar todos os itens do jogador em um FYI ou text dialog. Então, para verificar um único item do jogador, ainda recomendo a getPlayerItemById que usa um método do game.cpp findItemOfType.
Mas, volto a dizer, parabaims parabéns.
Verificar itens por atribbuto,nome etc...
Usar id e um tanto quanto limitado.
Edited Abril 12 by caotic
info
Group: Visconde
Joined: 04/11/12
Posts: 464
Reputation: +90
Gender: Masculino
Tibia Character: Lysty Of Death

se entendi bem verifica atributo certo? lol talves com isso daria para fazer o depot para o icon system não?
info
Group: Príncipe
Joined: 19/08/10
Posts: 4k
Reputation: +1.1k
Gender: Masculino

/\ na verdade pega soh os itens q o player ta usando/tao na BP dele... depot eh outra coisa xD mas da pra fazer a funçao pro depot tb bem facil ;x
Serve para procurar um item pelas descrições também?
info
Group: Infante
Joined: 04/03/11
Posts: 1.6k
Reputation: +393
Tibia Character: No Have

Serve para procurar um item pelas descrições também?
Sim qualquer atribbuto afinal tu esta pegando o uid.
Se precisar do thing de qualquer forma e usar getThing(uid)
Edited Abril 18 by caotic








info
Group: Infante
Joined: 04/03/11
Posts: 1.6k
Reputation: +393
Tibia Character: No Have
A função getPlayerItems lista todos os itens do player essa função e muito necessaria afinal a pessoal pode procurar itens especificos.
Vá em luascript.cpp e procure:
int32_t LuaScriptInterface::luaSetMonsterOutfit(lua_State* L) { //doSetMonsterOutfit(cid, name, time) int32_t time = (int32_t)popNumber(L); std::string name = popString(L); ScriptEnviroment* env = getEnv(); if(Creature* creature = env->getCreatureByUID(popNumber(L))) lua_pushboolean(L, Spell::CreateIllusion(creature, name, time) == RET_NOERROR); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; }Coloque embaixo:
int32_t LuaScriptInterface::luaGetPlayerItems(lua_State* L) { typedef std::map<int32_t, Container*> Containerlist; typedef std::list<Item*> Itemlist; Itemlist itemlist; Containerlist container; ScriptEnviroment* env = getEnv(); Player* player = env->getPlayerByUID(popNumber(L)); if (!player) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } lua_newtable(L); for(int32_t slotId = 1; slotId < 11; ++slotId) { if (Item* item = player->inventory[slotId]) { itemlist.push_back(item); if(Container* containeritem = item->getContainer()) { container[container.size()+1] = (containeritem); } } } int32_t x = 0; Item* item = NULL; while (x < container.size()) { x = x+1; Cylinder* cylinder = container[x]; if (cylinder) { for(int32_t i = cylinder->__getFirstIndex(); i < cylinder->__getLastIndex(); i++) { if(item = cylinder->__getThing(i)->getItem()) { itemlist.push_back(item); if(Container* subContainer = item->getContainer()) { container[container.size()+1] = subContainer; } } } } } ItemList::iterator it = itemlist.begin(); for(int32_t i = 1; it != itemlist.end(); ++it, ++i) { if (Item* item = *it) { lua_pushnumber(L, i); env->addTempItem(env, item); lua_pushnumber(L, env->addThing(item)); pushTable(L); } } return 1; }Procure continuando em luascript.cpp:
Abaixo coloque:
Em luascript.h procure:
Coloque abaixo:
Exemplo de uso:
function getItemsPlayer(cid, container) local x = {} local itens = getPlayerItems(cid) for i=1, #itens do if not isContainer(itens[i]) and not container then if (itens[i]) then table.insert(x, itens[i]) end end end return x end function onSay(cid, words, param, channel) local itens = getItemsPlayer(cid, false) local str = "" for i=1, #itens do if (itens[i]) then str = getItemName(itens[i]).."\n" end doShowTextDialog(cid, 1397, str) end return true endEdited Abril 9 by caotic